package com.lh7.ledger.CodeGenerator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.stereotype.Service;

import java.util.Collections;

@Service
public class CodeGenerator {
    public static void main(String[] args) {
        final String url = "jdbc:mysql://localhost:3306/ledger_db";
        final String username = "root";
        final String password = "root";
        final String author = "lh7";
        final String parentPackage = "";
        final String[] tableNames = new String[]{"users"};
        final String tablePrefixv = "";
        generateCode(url, username, password, author, parentPackage, tableNames, tablePrefixv);
    }

    public static void generateCode(String url, String username, String password, String author, String parentPackage, String[] tableNames, String tablePrefix) {
        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    // 设置代码作者
                    builder.author(author)
                            // 是否覆盖已存在的文件
                            .fileOverride()
                            // 代码输出目录 src/main/java/com/lh7/ledger
                            .outputDir("src/main/java/com/lh7/ledger");
                })
                // 包配置
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent(parentPackage)
                            // 设置模块名 // 不设置模块名，直接生成到父包下
                            .moduleName("")
                            // 实体类包名
                            .entity("pojo")
                            // Mapper 接口包名
                            .mapper("mapper")
                            // Service 接口包名
                            .service("service")
                            // Service 实现类包名
                            .serviceImpl("service.impl")
                            // Controller 类包名
                            .controller("controller")
                            // Mapper XML 文件输出路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/resources/mapper"));
                })
                // 策略配置
                .strategyConfig(builder -> {
                    // 指定要生成代码的表名，可以指定多个表
                    builder.addInclude(tableNames)
                            // 过滤表前缀，生成的实体类名会去掉该前缀
                            .addTablePrefix(tablePrefix);
                    // 实体类策略配置
                    builder.entityBuilder()
                            // 开启 Lombok 注解支持
                            .enableLombok();
                    // Controller 类策略配置
                    builder.controllerBuilder()
                            // 开启 Restful 风格
                            .enableRestStyle();
                })
                // 模板引擎配置，使用 Freemarker 模板引擎
                .templateEngine(new FreemarkerTemplateEngine())
                // 执行代码生成操作
                .execute();
    }
}
